package com.itheima.controller;

import com.itheima.pojo.Emp;
import com.itheima.pojo.Result;
import com.itheima.service.EmpService;
import com.itheima.service.impl.EmpServiceA;
import com.itheima.utils.XmlParserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;


/*
controller：控制层，接收前端发送的请求，对请求进行处理，并响应数据。
service：业务逻辑层，处理具体的业务逻辑。
dao：数据访问层(Data Access Object)（持久层），负责数据访问操作，包括数据的增、删、改、查。

弹幕：
    三层解耦好处：如果一个项目数据库发生变化，只用改dao层的数据，其他两层不用动，其他两层出问题同理
    不懂的家人们可以理解为面向对象 这只是先创建了个接口然后实现接口 并没有想象中的这么难
    写一个单独的接口，就是以后改代码，就不要去Service，DAO层去改； ，直接改接口的具体实现就行


以下是没有采用三层架构的模式写的，用postman测试后过之后，注释掉，用三层架构改造一下代码结构
 */

@RestController     //里面包含了@ResponseBody和@Controller
@Controller     //把component注解改为它的衍生注解
public class EmpController {
    //定义一个service层的对象
    //private EmpService empService = new EmpServiceA();

    /*
①. Service层及Dao层的实现类，交给IOC容器管理。要想将这两个类交给ioc容器管理，只需要加上@component就行
②. 为Controller及Service注入运行时，依赖的对象。controller程序运行时需要一个EmpService，而service当中运行需要一个EmpDao
    那IOC容器就需要为其提供这个类型的bean对象，需要在这个成员变量上面加上注解@Autowired
③. 运行测试。
把上面的代码改造，达到因为解耦的目的
     */
   /* @Autowired  //运行时，IOC容器会提供该类型的bean对象，并赋值给改变量--这就是依赖注入
    @Qualifier("empServiceA")  //配合Autowired注解指定要注入的是哪个bean，value属性就是bean的名字，默认是类名首字母小写
    private EmpService empService;
 */

    @Resource(name = "empServiceA")
    private EmpService empService;


    //用三层架构的方式改造：
    @RequestMapping("/listEmp")
    public Result list(){
        //1.调用service层来获取数据
        List<Emp> empList = empService.listEmp();

        //3. 响应数据，在result中传递了响应回去的数据，经过responsebody这个注解的处理之后，就会将这个对象转化为一个JSON响应给客户端
        return Result.success(empList);
    }


/*
    @RequestMapping("/listEmp")
    public Result list(){
        //1. 加载并解析emp.xml
        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List<Emp> empList = XmlParserUtils.parse(file, Emp.class);

        //2. 对数据进行转换处理 - gender, job
        empList.stream().forEach(emp -> {
            //处理 gender 1: 男, 2: 女
            String gender = emp.getGender();
            if("1".equals(gender)){
                emp.setGender("男");
            }else if("2".equals(gender)){
                emp.setGender("女");
            }

            //处理job - 1: 讲师, 2: 班主任 , 3: 就业指导
            String job = emp.getJob();
            if("1".equals(job)){
                emp.setJob("讲师");
            }else if("2".equals(job)){
                emp.setJob("班主任");
            }else if("3".equals(job)){
                emp.setJob("就业指导");
            }
        });

        //3. 响应数据，在result中传递了响应回去的数据，经过responsebody这个注解的处理之后，就会将这个对象转化为一个JSON响应给客户端
        return Result.success(empList);
*/



}
